<?php
/*
IMAGER.INC.PHP by martin $ 2010/05/18 01:48:30
*/

checkADMIN();

 $ip = getenv('REMOTE_ADDR') ? getenv('REMOTE_ADDR') : $_SERVER['REMOTE_ADDR'];
 $_ip = implode('', array_slice($sip=explode('.', $ip), 0, 2));
 $key = urlencode(my_encrypt(md5($_ip.OPASS)));


$DIVISION['style'] .= ' <link rel="stylesheet" href="css/page-nav.css" type="text/css" />';

$helperState = isset($_COOKIE['PPBLOG_HELPER_STATE']) ? $_COOKIE['PPBLOG_HELPER_STATE'] : 1;

$header = $body = '';

$images_cache = array();
$db = DB.'images.db';
$db_unlinked = DB.'images_unlinked.db';

# imager.inc.php での表示サムネイル画像数
if(g_('pitch')!='') setcookie('P2B_PITCH_IMAGER', g_('pitch'), time()+30*24*3600);

if(g_('aim')=='unlinked'){
 if(!is_file($db_unlinked)) update_images_cache(file($db));
 $images_cache = file($db_unlinked);
 if(g_('cmd')=='delall'){
  $deleted_imgs = array(); $deleted_size = 0;
  foreach($images_cache as $line){
   list($id,,$name) = explode('|', $line);
   $tarImg = IMG_DIR.$id.'_'.$name;
   if(is_file($tarImg)){
    $deleted_size += filesize($tarImg);
    $deleted_imgs[] = $tarImg;
   }
  }#foreach
  if(!empty($deleted_imgs)){
   $deleted_size = round($deleted_size * 0.001, 1);
   mod_images_DB($deleted_imgs, 'DEL');
   $body .= '<div class="tinyheader" style="margin-top: 5em; width:400px;">'.sizeof($deleted_imgs)
         .  ' 枚の画像をすべて削除しました。削除した総ファイルサイズは約 '.$deleted_size.' KBでした。</div>'
         .  '<p class="center"><a href="admin.php?mode=imager"><img src="Images/reload1.png" alt="" title="画像管理画面へ" /></a></p>';
   return $DIVISION['body'] .= $body;
  }
 }
}

if(g_('DID') != ''){
 $IMGS = my_glob("_", IMG_DIR);
 foreach($IMGS as $i=>$img){
  if(g_('DID') == substr(md5($img),2,10)){
   mod_images_DB(array($img), 'DEL');
   break;
  }
 }
 update_images_cache(file($db));
}

$images_cache = g_('aim') == 'unlinked' ? file($db_unlinked) : file($db);
$total = count($images_cache);
$pitch= g_('pitch')=='' ? (empty($_COOKIE['P2B_PITCH_IMAGER'])?15:$_COOKIE['P2B_PITCH_IMAGER']) : g_('pitch');
$page = g_('page')=='' ? 1 : g_('page');
$offset = $pitch * ($page-1);

$pages = ceil($total/$pitch);
$pageBlock = ceil($page / 10);

$LINES = array_slice($images_cache, $offset, $pitch);
unset($images_cache);

# Page Navigation

$pageNav = '<table cellspacing="0" cellpadding="0" class="page-nav" style="width: auto;"><tr>';
$unlinked = g_('aim')=='unlinked' ? '&amp;aim=unlinked' : '';

if($page > 1){
 $pageNav .= '<td class="avant">&nbsp;</td><td class="centre"><a href="admin.php?mode=imager'.$unlinked.'&amp;page='.($page-1).'">Prev</a></td><td class="apres">&nbsp;</td>';
}
for ($i=($pageBlock-1)*10+1;$i<=$pages;$i++){
 if($i==$page){
  $pageNav .= '<td class="current" style="font-weight:800;">'.$i.'</td>';
 } else {
  $pageNav .= '<td class="link"><a href="admin.php?mode='.$mode.$unlinked.'&amp;page='.$i.'">'.$i.'</a></td>';
 }
 if($i%10==0) break;
}
if($page < $pages){
 $pageNav .= '<td class="avant">&nbsp;</td><td class="centre"><a href="admin.php?mode='.$mode.$unlinked.'&amp;page='.($page+1).'">Next</a></td><td class="apres">&nbsp;</td>';
}
if($pages > 10 && ($pages-$pageBlock*10) > 0 ){
 $pageNav .= '<td class="avant">&nbsp;</td><td class="centre"><a href="admin.php?mode='.$mode.$unlinked.'&amp;page='.($pageBlock*10+1).'">
 '.($pB=$pageBlock*10+1).'-'.($pages > $pB+9 ? $pB+9 : $pB+$pages%10-1).' of '
 .($pages).' pages</a></td><td class="apres">&nbsp;</td>';
}
$pageNav .= '</tr></table>'.NL;

if($pages==1) $pageNav = '';

$pitch_select = '<form method="get" action="admin.php?mode=imager" style="display:inline;width:30px;">
<select name="pitch" id="pitch" style="width:42px;"
 onchange="location=\'admin.php?mode=imager&pitch=\'+this.value;this.blur();">
<option value="15"'.($pitch==15?' selected="selected"':'').'> 15 </option>
<option value="30"'.($pitch==30?' selected="selected"':'').'> 30 </option>
<option value="45"'.($pitch==45?' selected="selected"':'').'> 45 </option>
</select></form>
';

$body = '
<script type="text/javascript">/*<![CDATA[*/
insertfile = function(){
 var w = d.getElementById("upfiles");
 w.firstChild.src = "about:blank";
 w.firstChild.src = "upload.php?state=standalone&KY='.$key.'";
 w.firstChild.style.height = "100%";
 w.firstChild.style.width = "100%";
 w.style.position = "absolute";
 w.style.left = "300px";
 w.style.top = "100px";
 w.style.display = "block";
}
/*]]>*/</script>
<div style="width:99%;">
<h1 style="margin-bottom: .5em;">ImageManager</h1>
'.$pageNav.'
<ul class="p2em" style="margin: auto; width: 580px; display:'.($helperState?'block':'none').';">
'.(g_('aim')=='unlinked' ? '
 <li>記事で使われていない画像だけ <strong>'.$total.'</strong> 枚を表示しています
  → <a href="admin.php?mode=imager">すべて表示</a>
 </li>'
.($total > 0 ? '
 <li>右のアイコンで未使用の画像を一括して削除できます
  <a href="admin.php?mode=imager&amp;aim=unlinked&amp;cmd=delall" onclick=\'return my_confirm("この操作は元には戻せません\n本当に未使用の画像を全部");\'>
   <img src="Images/delete1.png" width="32" height="29" alt="Sort" style="vertical-align: middle;" />
  </a>
 </li>
 <li>上の全削除を実行すると元の画像だけでなくサムネイル化された画像も削除されます。</li>' :
'<li>どうも未使用の画像はないようですね。</li>') :
'<li>アップロードの新しい順に'.$pitch_select.'件ずつ表示しています。</li>
 <li>今のところ、<strong>'.$total.'</strong> 枚の画像がアップされています。</li>
 <li>縮小された画像はクリックすると元の画像を表示します</li>
 <li>新規に画像をアップロードしたいときは このアイコン <a href="#controlPanel" onclick="insertfile();return false;">
  <img src="Images/add1.png" width="32" height="29" alt="Upload" style="vertical-align: middle;" /></a> をクリック</li>
 <li>このアイコン <a href="admin.php?mode=rebuild">
  <img src="Images/reload1.png" width="32" height="29" alt="Refresh" style="vertical-align: middle;" /></a>
 をクリックするとデータベースを更新します(普通は不要)。</li>
 <li>エントリーに使われていない画像のみを表示させたいときは右のアイコンをクリック
   <a href="admin.php?mode=imager&amp;aim=unlinked">
    <img src="Images/refresh2.png" width="19" height="21" alt="Sort" style="vertical-align: middle;" />
   </a>
 </li>').'
</ul><p class="helper" onclick="toggleHelper(this);" title="説明を閉じる">　</p>
<div style="width:98%;background:#eff1f3;margin:0 auto 20px auto;">
<table cellspacing="0" cellpadding="1" style="width: 100%;border:1px solid #333;">
 <colgroup>
  <col style="width:120px;" /><col style="width:70px;" /><col style="width:140px;" />
  <col style="width:auto;" /><col style="width:4em;" />
 </colgroup>
 <tr style="text-align:center;background:url(Images/grad.png);max-height: 23px;">
  <th>サムネイル</th>
  <th colspan="2" style="text-align:left;padding-left:5em;">Information</th>
  <th>エントリー記事</th>
  <th>削除</th>
 </tr>
';
$_i = 0;

$notfound = array();
$aim = g_('aim') ? '&amp;aim=unlinked' : '';

foreach ($LINES as $i => $info){
 $split = explode("|", $info); 
 $len = sizeof($split);// IMG: 12, 14
 $id = $split[0]; $mdate = $split[1]; $name = $split[2]; $w = $split[3]; $h = $split[4]; $fs = $split[5]; $entry = $split[7];
 if(strpos($entry, ',')) list($entry,) = explode(',', $entry, 2);
 if($len >= 12){
  $tw = $split[8]; $th = $split[9]; $tfs = $split[10];
 } else {
  $tfs = $output = '';
 }
 $dir = IMG_DIR; $id = substr($id, 0, 1) == 0 ? substr($id, 1) : $id;
 $bg = ($_i%2==0) ? '#eff1f3' : '#fff';
 $md5 = substr(md5($dir.$id.'_'.$name),2,10);
 $img = ($len==9) ? IMG_DIR.$id.'_'.$name : ( (($tfs==''||$tfs=='BMP')?IMG_DIR:IMG_DIR.THUMB1).$id.'_'.$name );
 $unpub = strpos($id, 'd') ? '<sup style="color:crimson;">未公開</sup>' : '';
 if(!is_file($img)){
  $notfound[] = $info;
  continue;
 }
 if($len==9){
  $output = '<img class="photo" src="'.$img.'" width="'.$w.'" height="'.$h.'" alt="" style="cursor:default;" title="原寸大です" />';
 } else if($len >= 12){
  $output = '<img class="photo" onclick="imagePop(event, \''.IMG_DIR.$id.'_'.$name.'\', '.$w.', '.$h.');" src="'.$img.'" width="'.$tw.'" height="'.$th.'" alt="" title="画像を拡大" />';
 }
 $body .= '
 <tr style="background:'.$bg.';">
  <td>
 '.$output.
 '
  </td>
  <td style="text-align:right;">
  ファイル名 :<br />
  　　サイズ :<br />
  '.($len==7 ?'':'　　大きさ :<br />').'
  　アップ日 :
  </td>
  <td style="text-align:left;padding-left:.5em;">
   '.$name.'<br />
   '.$fs.' KB<br />
   '.($len > 7 ? $w.' x '.$h.'<br />':'').'
   '.date('Y-m-d', substr($mdate, 0, 10)).'
  </td>
  <td>'.($entry==''?'&mdash;</td>':'<a href="index.php?UID='.$id.'" title="記事を表示します">'.$entry.'</a>'.$unpub.'</td>').'
  <td style="text-align:center;"><a href="admin.php?mode=imager&amp;DID='.$md5.'&amp;page='.$page.$aim.'" onclick="return my_confirm(\'この画像を\');"><img src="Images/trash.png" alt="Delete" title="削除" /></a></td></tr>'.NL;
  $_i++;
}

if(!empty($notfound)){
 $images_cache = file(DB.'images.db');
 $_images_cache = array();
 foreach ($images_cache as $info){
  foreach ($notfound as $not){
   if($info == $not) continue 2;
  }
  $_images_cache[] = $info;
 }
 rewrite(DB.'images.db', $_images_cache);
}

$body .= '</table></div>'.NL.$pageNav.NL.'</div>'.NL;
$body .= '<div id="upfiles" style="display: none;"><iframe src="upload.php" frameborder="0"></iframe></div>';//

return $DIVISION['body'] .= $body;

?>
